Экосистема RubyGems является ответом Ruby на хаотическую «проблему зависимостей» традиционного управления библиотеками. Вместо перезаписи файлов в общей глобальной директории, RubyGems использует архитектурную изоляцию.
1. Рантайм-магия
В отличие от стандартных библиотек, каждая версия гема хранится в своей собственной изолированной директории. Когда вы вызываете gem 'имя', 'версия', RubyGems выполняет «рантайм-магию»: динамически добавляет путь к каталогу lib этого конкретного гема в глобальный массив $LOAD_PATH глобального массива.
2. Разрешение зависимостей и репозитории
Хотя локальная установка локальная установка может завершиться неудачей, если отсутствует зависимость, удалённая установка (с использованием --remote) автоматически загружает полный дерево зависимостей из центрального репозитория, обеспечивая, что ограничения версий будут удовлетворены до начала выполнения.